Llamar a una función externa
Este mecanismo se puede utilizar para llamar a una función externa en una aplicación IEC a través de un socket de dominio Unix. Esto le permite crear sus propias funcionalidades. Al mismo tiempo, se logra la separación del proceso. Como interfaz en IEC, el EXTAPI.UDSExternalFunction
bloque de funciones se proporciona en el ExtensionAPI
biblioteca. En Python, el ExternalFunctionBase
La clase se utiliza para este propósito, que se proporciona en el ejemplo proporcionado.
Este ejemplo también explica cómo utilizar el mecanismo. El ejemplo contiene un proyecto IEC con llamada implementada de una función externa. Además, el ejemplo contiene la implementación de la función llamada myExternalFunction
en Python.
Una vez CODESYS Control Extension Package instalado, puede encontrar el UDSExternalCallExample.project
ejemplo y el script uds_external_function.py
de Python en el siguiente directorio: C:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall
.
Ejemplo, aplicación IEC
En el UDSExternalCallExample.project
proyecto de muestra, un nuevo myExternalFunction
se crea el bloque de funciones. Esto amplía el EXTAPI.UDSExternalFunction
FB con entradas y salidas de tipo DINT
.También son posibles otros tipos de datos. Al principio, se debe pasar el nombre de la función a llamar en Python. Esta dirección debe ser única.
El siguiente código se utiliza para agregar las entradas de la función externa de la interfaz:
Result := THIS^.AddParameter('parameterIn1', 'DINT', TO_STRING(diIn1));
Luego se usa el siguiente código para llamar a la función externa:
Result := THIS^.Call();
El siguiente código se utiliza para consultar el valor de retorno de la función implementada en Python:
Result := THIS^.GetParameter('parameterOut', 'DINT', ADR(sValue));
Los parámetros son de tipo string
. En consecuencia, tiene que ser convertido al tipo de datos deseado.
Ejemplo, secuencia de comandos de Python
Importante
Los ejemplos de Python proporcionados para la API de extensión requieren Python 3.0.
el incluido uds_external_function.py
muestra proporciona la ExternalFunctionBase
clase, que proporciona comunicación de Unix Domain Socket con el sistema de tiempo de ejecución para esta funcionalidad.
El myExternalFunction
La clase implementada en el ejemplo extiende el ExternalFunctionBase
clase.La Call()
es necesaria la función, que se llama desde el mecanismo de IEC. Los parámetros de entrada y salida se pasan en forma de tuplas de cadenas.
Ejemplo: {'parameterIn1': ('DINT', '11'), 'parameterIn2': ('DINT', '22')}
En el ejemplo, el Call()
La función implementa una simple adición de los dos parámetros de entrada:
def Call(self, dictParams): in1 = int(dictParams['parameterIn1'][1]) in2 = int(dictParams['parameterIn2'][1]) dictRetParams = {} dictRetParams['parameterOut'] = 'DINT', in1 + in2 return dictRetParams
Copie el script
uds_external_function.py
(ubicado en el directorioC:\Program Files\CODESYS <version>\CODESYS\CODESYS Control SL Extension Package\<version>\Examples\ExternalCall
una vez instalado el CODESYS Control Extension Package) en el dispositivo de destino.Ejecutar el script
uds_external_function.py
.Entonces comienza el
UDSExternalCallExample.project
proyecto de muestra en CODESYS.Puede ver que el proyecto llama al
myExternalFunction()
función del script de Python y se suman los dos parámetros de entrada.
Uso de la interfaz solo como miembro de Linux | sí |
Separación de procesos | sí |